package GoodsActivityService

import "gdshop-back-end-go/common/entity"

// GetMaxDiscountActivity 取到最大优惠的活动，第一个参数有可能返回 nil 说明没有匹配的活动
// activitys 当前商品参与的活动列表
func GetMaxDiscountActivity(activitys []*entity.GoodsActivity, totalPrice int64) (*entity.GoodsActivity,
	int64, error) {
	var discountMoney int64 = 0
	nowActivity := (*entity.GoodsActivity)(nil)

	for _, item := range activitys {
		// 暂时先处理 activity_type == 1 == 2 的情况
		if item.ActivityType != 1 && item.ActivityType != 2 {
			continue
		}

		// 解析规则
		tmps, err := AnalysisRule(item.Rules)
		if err != nil {
			return nil, 0, err
		}
		if len(tmps) < 1 {
			// 防止出错
			continue
		}

		// 处理 loop == 1 的
		if item.Loop == 1 {
			// 每满 减(折)
			if tmps[0].ThresholdNum > totalPrice {
				// 总支付金额 不超过 门槛
				continue
			}
			var tmpDiscountMoney float64 = 0
			// 减
			if item.ActivityType == 2 {
				// 先算出循环次数
				num := totalPrice / tmps[0].ThresholdNum
				tmpDiscountMoney = float64(tmps[0].DiscountNum * num)
			}
			// 折
			if item.ActivityType == 1 {
				// 折 TODO 这里有点疑义，后面再测试
				tmpDiscountMoney = float64(totalPrice) - float64(totalPrice)*
					float64(tmps[0].DiscountNum)/1000.00
			}
			if discountMoney > int64(tmpDiscountMoney) {
				continue
			}
			discountMoney = int64(tmpDiscountMoney)
			nowActivity = item
		} else {
			for _, r := range tmps {
				if r.ThresholdNum > totalPrice {
					continue
				}

				var tmpDiscountMoney float64 = 0
				// 减
				if item.ActivityType == 2 {
					tmpDiscountMoney = float64(r.DiscountNum)
				}
				// 折
				if item.ActivityType == 1 {
					tmpDiscountMoney = float64(totalPrice) - float64(totalPrice)*
						float64(r.DiscountNum)/1000.00
				}

				if discountMoney > int64(tmpDiscountMoney) {
					// 上一个优惠金额，大于当前，则循环下一个活动
					continue
				}

				discountMoney = int64(tmpDiscountMoney)
				nowActivity = item
			}
		}
		//fmt.Println("----------------选中 ", nowActivity, " 优惠 ", discountMoney)
	}

	return nowActivity, discountMoney, nil
}
